#include <stdio.h>
#include <signal.h>
void signal_set1(int);//信号处理函数，只传递一个参数信号代码
void signal_set(struct sigaction *act)
{
	switch(act->sa_flags){
		case (int)SIG_DFL:
			printf("using default hander\n");
			break;
		case (int)SIG_IGN:
			printf("ignore the signal\n");
			break;
		default:
			printf("%0x\n",act->sa_handler);
			break;
	}

}
void signal_set1(int x)//信号处理函数
{
	printf("xxxxx\n");
}

int main(int argc,char** argv)
{
	int i;
	struct sigaction act,oldact;
	act.sa_handler = signal_set1;
	act.sa_flags = SA_RESETHAND;
	//SA_RESETHANDD 在处理完信号之后，将信号恢复成默认处理
	//SA_NODEFER在信号处理程序执行期间仍然可以接收信号
	sigaction (SIGINT,&act,&oldact) ;//改变信号的处理模式,旧的放到oldset中
	for (i=1; i<12; i++)
	{
		printf("signal %d handler is : ",i);
		sigaction (i,NULL,&oldact) ;//读取第i个信号的sigaction,之后输出其处理方式
		signal_set(&oldact);//如果act为NULL，oldact会存储信号当前的行为
		//act不为空，oldact不为空，则oldact会存储信号以前的处理模式
	}

	while(1){
		//等待信号的到来
	}
	return 0;

}

